package com.heima.item.handler;

import com.github.benmanes.caffeine.cache.Cache;
import com.heima.item.pojo.Item;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import top.javatool.canal.client.annotation.CanalTable;
import top.javatool.canal.client.handler.EntryHandler;

/**
 * @author: itheima
 * @create: 2022-05-03 15:06
 */
@CanalTable("tb_item")
@Component
public class ItemHanler implements EntryHandler<Item> {

    @Autowired
    private RedisHandler redisHandler;

    @Autowired
    private Cache<Long, Item> itemCache;

    /**
     * 监听到新增操作
     *
     * @param item
     */
    @Override
    public void insert(Item item) {
        System.out.println("监听到新增操作");
        //1.写数据到JVM进程缓存
        itemCache.put(item.getId(), item);

        //2.写数据到Redis
        redisHandler.saveItem(item);
    }

    /**
     * 监听到修改操作
     *
     * @param before 修改前数据
     * @param after  修改后数据
     */
    @Override
    public void update(Item before, Item after) {
        System.out.println("监听到修改操作");
        //1.写数据到JVM进程缓存
        itemCache.put(after.getId(), after);

        //2.写数据到Redis
        redisHandler.saveItem(after);
    }

    /**
     * 监听到删除操作
     *
     * @param item
     */
    @Override
    public void delete(Item item) {
        System.out.println("监听到删除操作");
        //1.清理JVM进程缓存
        itemCache.invalidate(item.getId());
        //2.删除redis中数据
        redisHandler.deleteById(item.getId());
    }
}
